package com.healthy_software.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.healthy_software.enums.Gender;
import lombok.*;
import lombok.experimental.Accessors;

import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.Date;

/**
 * <p>
 * User对象
 * </p>
 *
 * @author 陈子朋
 * @since 2025-4
 */
@Data
@Builder
@Accessors(chain = true)
@AllArgsConstructor
@NoArgsConstructor
@EqualsAndHashCode(callSuper = false)
@TableName("users")
public class User implements Serializable {

    private static final long serialVersionUID = 1L;
    /**
     * 主键
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;

    /**
     * 手机号码
     */
    private String phone;

    /**
     * 密码，加密存储
     */
    private String password;

    /**
     * 昵称，默认是随机字符
     */
    private String nickname;

    /**
     * 用户头像
     */
    private String avatar = "";

    /**
     * 用户性别
     */
    private Gender gender;

    /**
     * 用户生日
     */
    private Date birthday;

    /**
     * 用户身高
     */
    private BigDecimal height;

    /**
     * 用户体重
     */
    private BigDecimal weight;

    /**
     * 创建时间
     */
    private LocalDateTime createdTime;

    /**
     * 更新时间
     */
    private LocalDateTime updatedTime;

    /**
     * 微信用户唯一标识
     */
    private String openid;

    /**
     * 活动水平：1=久坐，2=轻度，3=中度，4=重度
     */
    private Integer activityLevel;

    /**
     * 运动基础水平：1=零基础，2=初级，3=中级，4=高级
     */
    private Integer exerciseBaseLevel;

    /**
     * 已知健康问题（多选项用逗号分隔，如：高血压,过敏性鼻炎）
     */
    private String knownHealthIssues;

    /**
     * 饮食偏好（如：素食、均衡饮食、低碳水）
     */
    private String dietPreference;

    /**
     * 饮食限制（多选项用逗号或标准化标签分隔，如：无麸质,坚果过敏）
     */
    private String dietRestrictions;

    /**
     * 睡眠质量自评（1=极差，5=极好）
     */
    private Integer sleepQualityRating;

    /**
     * 压力水平自评（1=无压力，5=极度压力）
     */
    private Integer stressLevelRating;

    /**
     * 额外健康信息（自由文本描述）
     */
    private String extraHealthInfo;
}
